import { createApp } from 'vue';
import App from './App.vue';

// 全局样式
import './assets/main.css';

// VantUI
import Vant from 'vant';
import 'vant/lib/index.css';

// ElementUI
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

// 加载路由
import router from './routers/index.js';

// 加载请求插件
import request from './services/request';

// 加载cookie插件
import VueCookies from 'vue3-cookies';

// 加载自定义封装的工具箱
import tools from './services/tools';

// pinia 状态管理进行挂载
import { createPinia } from 'pinia';// 引入pinia
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';// 引入pinia数据持久化插件

const app = createApp(App)
    .use(router)
    .use(Vant)
    .use(ElementPlus)
    .use(request)
    .use(createPinia().use(piniaPluginPersistedstate))
    .use(VueCookies)
    .use(tools)
    .mount('#app');

router.beforeEach(async (to,from) => {
    // to 这个参数代表 去到哪个路由
    // from 这个参数代表 从哪里来
    // next 这个参数代表 是否可以去到下一步

    // IsLogin 如果等于true 就说明当前访问的路由 是需要登录才可以访问
    let IsLogin = to.meta.IsLogin ? true : false;

    if(IsLogin === true)
    {
        // 获取登录信息
        let business = app.$business.value ? app.$business.value : {}

        // 判断登录信息是否为空
        if(!business || Object.getOwnPropertyNames(business).length === 0)
        {
            // 提示
            app.$fail('请先登录');

            // 跳转
            return {path:'/business/login'};
        }

        // 验证登录信息
        let result = await app.$check();

        if(result.code === 0)
        {
            // 保留它所需要去到页面地址
            app.$cookies.set('redirect', to.fullPath);

            // 清除缓存
            app.$cookies.remove('business');

            // 提醒消息
            app.$fail(result.msg);

            return {path:'/business/login'};
        }
    }
})